"""
数据库初始化脚本
创建初始管理员用户和示例数据
"""
from sqlalchemy.orm import Session
from .database import SessionLocal, engine
from .models.user import User
from .models.banner import Banner
from .models.news import News
from .models.service import Service
from .models.company_info import CompanyInfo
from .utils.auth import get_password_hash


def init_db():
    """初始化数据库数据"""
    db = SessionLocal()

    try:
        # 检查是否已有管理员用户
        admin_user = db.query(User).filter(User.username == "admin").first()

        if not admin_user:
            # 创建默认管理员用户
            admin_user = User(
                username="admin",
                hashed_password=get_password_hash("admin123"),
                role="admin",
                is_active=True
            )
            db.add(admin_user)
            print("创建默认管理员用户: admin / admin123")

        # 创建示例轮播图数据
        banner_count = db.query(Banner).count()
        if banner_count == 0:
            sample_banners = [
                Banner(
                    title="专业环境工程咨询",
                    subtitle="为您提供全方位的环境解决方案",
                    image_url="https://images.unsplash.com/photo-1441974231531-c6227db76b6e?w=1200&h=600&fit=crop",
                    description="我们拥有专业的环境工程团队，为企业提供环境影响评价、污染治理等服务",
                    is_active=True,
                    sort_order=1
                ),
                Banner(
                    title="绿色发展 可持续未来",
                    subtitle="环保技术创新引领者",
                    image_url="https://images.unsplash.com/photo-1542601906990-b4d3fb778b09?w=1200&h=600&fit=crop",
                    description="致力于环保技术研发，推动绿色发展，创造可持续的美好未来",
                    is_active=True,
                    sort_order=2
                )
            ]

            for banner in sample_banners:
                db.add(banner)
            print("创建示例轮播图数据")

        # 创建示例新闻数据
        news_count = db.query(News).count()
        if news_count == 0:
            sample_news = [
                News(
                    title="公司荣获环保技术创新奖",
                    excerpt="我公司在环保技术创新方面取得重大突破，荣获行业创新奖",
                    content="<p>近日，我公司凭借在环保技术创新方面的突出贡献，荣获了行业权威机构颁发的环保技术创新奖。这一荣誉的获得，标志着我公司在环保技术研发领域达到了新的高度。</p><p>我公司一直致力于环保技术的研发与应用，通过不断的技术创新和实践探索，为客户提供更加高效、环保的解决方案。</p>",
                    category="公司新闻",
                    author="管理员",
                    is_published=True,
                    is_featured=True
                ),
                News(
                    title="新环保法规解读及应对策略",
                    excerpt="最新环保法规发布，我们为您详细解读并提供应对策略",
                    content="<p>随着国家对环保要求的不断提高，新的环保法规陆续出台。我公司专业团队对最新法规进行了深入研究，为客户提供详细的解读和应对策略。</p><p>我们建议企业应当及时了解新法规要求，制定相应的环保措施，确保合规经营。</p>",
                    category="行业动态",
                    author="技术部",
                    is_published=True,
                    is_featured=False
                )
            ]

            for news in sample_news:
                db.add(news)
            print("创建示例新闻数据")

        # 创建示例服务数据
        service_count = db.query(Service).count()
        if service_count == 0:
            sample_services = [
                Service(
                    name="环境影响评价",
                    description="专业的环境影响评价服务，为建设项目提供全面的环境评估",
                    content="<p>环境影响评价是指对规划和建设项目实施后可能造成的环境影响进行分析、预测和评估。</p><p>我们的服务包括：</p><ul><li>环境现状调查</li><li>环境影响预测</li><li>环境保护措施</li><li>环境监测计划</li></ul>",
                    icon_url="/images/service-eia.svg",
                    category="评价服务",
                    price=50000.00,
                    features='["专业团队", "快速响应", "合规保证"]',
                    is_active=True,
                    is_featured=True,
                    sort_order=1
                ),
                Service(
                    name="污染治理工程",
                    description="提供水、气、声、固废等各类污染治理工程设计与施工",
                    content="<p>我们提供全方位的污染治理解决方案，包括工程设计、设备选型、施工管理等。</p>",
                    icon_url="/images/service-treatment.svg",
                    category="治理工程",
                    price=100000.00,
                    features='["一站式服务", "技术先进", "效果保证"]',
                    is_active=True,
                    is_featured=True,
                    sort_order=2
                ),
                Service(
                    name="环境监测",
                    description="提供专业的环境监测服务，确保环境质量达标",
                    content="<p>环境监测是环境保护的重要手段，我们提供全面的监测服务。</p>",
                    icon_url="/images/service-monitoring.svg",
                    category="监测服务",
                    price=20000.00,
                    features='["设备先进", "数据准确", "报告及时"]',
                    is_active=True,
                    is_featured=False,
                    sort_order=3
                )
            ]

            for service in sample_services:
                db.add(service)
            print("创建示例服务数据")

        # 创建示例公司信息
        company_count = db.query(CompanyInfo).count()
        if company_count == 0:
            company_info = CompanyInfo(
                company_name="广州环保科技有限公司",
                description="专业从事环境工程咨询的高新技术企业，致力于为客户提供优质的环保解决方案",
                history="公司成立于2010年，专注环保领域十余年，积累了丰富的项目经验和技术实力",
                culture="绿色发展，科技创新，服务至上，诚信经营",
                vision="成为华南地区领先的环保咨询服务商，为美丽中国建设贡献力量",
                address="广州市天河区科技园路123号环保大厦8楼",
                phone="020-12345678",
                email="info@gzhuanbao.com",
                website="www.gzhuanbao.com",
                business_license="91440101123456789X",
                established_date="2010年3月",
                employee_count="50-100人",
                registered_capital="1000万元"
            )
            db.add(company_info)
            print("创建示例公司信息")

        # 提交所有更改
        db.commit()
        print("数据库初始化完成！")

    except Exception as e:
        print(f"数据库初始化失败: {e}")
        db.rollback()
    finally:
        db.close()


if __name__ == "__main__":
    init_db()